Skip to content

Conversation

@MichaReiser
Copy link
Member

Summary

This is a follow up to #15763 (comment)

It reverts the change to using ptr equality for AstNodeRefs, which in turn removes the Eq, PartialEq, and Hash implementations for AstNodeRefs parametrized with AST nodes.
Cheap comparisons shouldn't be needed because the node field is generally marked as [#tracked] and #[no_eq] and removing the implementations even enforces that those
attributes are set on all AstNodeRef fields (which is good).

The only downside this has is that we technically wouldn't have to mark the Unpack::target as #[tracked] because
the target field is accessed in every query accepting Unpack as an argument.

Overall, enforcing the use of #[tracked] seems like a good trade off, espacially considering that it's very likely that
we'd probably forget to mark the Unpack::target field as tracked if we add a new Unpack query that doesn't access the target.

Test Plan

cargo test

@MichaReiser MichaReiser added internal An internal refactor or improvement ty Multi-file analysis & type inference labels Feb 11, 2025
Copy link
Contributor

@carljm carljm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, modulo the one inline question.

To be clear, my comment wasn't intended to suggest that I think it's important we make this change; I was just curious what the tradeoffs are and if there was anything we should document for future.

@MichaReiser
Copy link
Member Author

Hmm, it does seem that this regresses performance slightly (2%) for the cold case. Let me re-run to verify that it is real. It might just be the cost of tracking the Unpack::target field.

@MichaReiser MichaReiser merged commit 9c17931 into main Feb 11, 2025
21 checks passed
@MichaReiser MichaReiser deleted the micha/revert-astnoderef-eq-hash-change branch February 11, 2025 18:55
dcreager added a commit that referenced this pull request Feb 11, 2025
* main:
  add diagnostic `Span` (couples `File` and `TextRange`) (#16101)
  Remove `Hash` and `Eq` from `AstNodeRef` for types not implementing `Eq` or `Hash` (#16100)
  Fix release build warning about unused todo type message (#16102)
  [`pydocstyle`] Handle arguments with the same names as sections (`D417`) (#16011)
  [red-knot] Reduce usage of `From<Type>` implementations when working with `Symbol`s (#16076)
  Transition to salsa coarse-grained tracked structs (#15763)
  [`pyupgrade`] Handle micro version numbers correctly (`UP036`) (#16091)
  [red-knot] `T | object == object` (#16088)
  [`ruff`] Skip singleton starred expressions for `incorrectly-parenthesized-tuple-in-subscript` (`RUF031`) (#16083)
  Delete left-over `verbosity.rs (#16081)
  [red-knot] User-level configuration (#16021)
  Add `user_configuration_directory` to `System` (#16020)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

internal An internal refactor or improvement ty Multi-file analysis & type inference

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants